package com.tbit.main.dao.core;

import com.tbit.main.pojo.VO.WorkOrderQueryReqVO;
import com.tbit.main.pojo.VO.WorkOrderVO;
import com.tbit.main.pojo.WorkOrder;
import com.tbit.main.pojo.WorkOrderSta;
import com.tbit.main.pojo.dto.TodoItemsDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author LMY
 * @create 2021-05-18 15:40
 * 工单
 */
public interface WorkOrderDao {
    /**
     * 创建工单
     *
     * @param workOrder
     */
    void insert(WorkOrder workOrder);

    /**
     * 根据工单编号查询
     *
     * @param workOrderId
     * @return
     */
    WorkOrder getByWorkOrderId(String workOrderId);

    /**
     * 根据工单单号批量查询
     *
     * @param workOrderIds
     * @return
     */
    List<WorkOrder> getByWorkOrderIds(String workOrderIds);

    /**
     * 按时间分组统计
     *
     * @param params
     * @return
     */
    List<WorkOrderSta> groupByTime(Map<String, Object> params);

    /**
     * 根据用户和时间查询工单
     *
     * @param map
     * @return
     */
    List<WorkOrder> getByUserId(Map<String, Object> map);


    /**
     * 修改工单状态
     *
     * @param map
     */
    void updateState(Map<String, Object> map);

    /**
     * 查询完成工单总数
     *
     * @param map
     * @return
     */
    Integer getByUserIdCount(Map<String, Object> map);

    /**
     * 批量更新失效，超时
     */
    void updateTime(Map<String, Object> map);

    /**
     * 删除
     *
     * @param workOrderId
     */
    void del(String workOrderId);

    /**
     * 更新
     *
     * @param workOrder
     */
    void update(WorkOrder workOrder);

    /**
     * 查询所有工单列表
     * @param reqVO 请求参数
     * @return 工单列表
     */
    List<WorkOrder> selectWorkOrderList(@Param("reqVO") WorkOrderQueryReqVO reqVO);

    /**
     * 将当前记录置为无效
     * @param workOrderIdList 当前工单业务记录
     * @param isValid 是否有效
     * @param state 工单状态
     * @param remark 备注
     */
    void updateAuditToInvalidByBusinessNOList(@Param("workOrderIdList") List<String> workOrderIdList, @Param("isValid") Integer isValid, @Param("state") Integer state, @Param("remark") String remark);

    /**
     * 根据业务类型编号查询
     * @param businessNOList 业务编号
     * @return 工单列表
     */
    List<WorkOrder> selectByBusinessNOList(@Param("businessNOList") List<Integer> businessNOList);

}
